﻿// 3699. 树的高度.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <memory.h>


using namespace std;


/*
https://www.acwing.com/problem/content/3702/

树是一种特殊的图结构，有根树是一个有固定根的树。

现在给定一棵有根树，编程求出树中所有节点到指定的根节点最远距离。

输入格式
第一行是两个整数 N,M，表示数的顶点数和根节点的编号。

接下来 N−1行，每行两个整数 u,v
，表示编号为 u的节点和编号为 v的节点间有一条边。

输出格式
输出距离根节点最远的点到根的距离。

数据范围
1≤N≤10000
,
1≤M≤N
,
1≤u,v≤N
输入样例：
5 5
1 2
1 4
1 5
2 3
输出样例：
3
*/


const int N = 20010;
int h[N], e[N], ne[N], idx;
int dis[N];

void add(int a, int b) {
	e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

int n, root;
int u, v;



void dfs(int x) {
	for (int i = h[x]; i != -1; i = ne[i]) {
		int j = e[i];
		if (dis[j] == -1) {
			dis[j] = dis[x] + 1;
			dfs(j);
		}
	}
}

void solve() {
	dis[root] = 0;
	for (int i = h[root]; i != -1; i = ne[i]) {
		int j = e[i];
		if (dis[j] == -1) {
			dis[j] = dis[root] + 1;
			dfs(j);
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, dis[i]);
	}

	cout << ans << endl;
}



int main()
{
	cin >> n >> root;
	memset(dis, -1, sizeof dis);
	memset(h, -1, sizeof h);
	for (int i = 1; i < n; i++) {
		cin >> u >> v;
		add(u, v); add(v, u);
	}

	solve();


	return 0;
}

